﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FTools.Persistencia;
using System.Data.SqlClient;
using FTools.Dominio;
using System.Collections;
using FTools.Generico;
using FTools.Interface;

namespace FTools.Comunicacion
{
    class ComRubro : InterfaceRubro
    {
        Conexion objConexion = new Conexion();
        SqlConnection conexion;
        SqlTransaction transaccion = null;
        PerRubro objPerRubro = new PerRubro();

        public Rubro obtenerRubro(long xIdRubro)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Rubro objRubro = objPerRubro.obtenerRubro(conexion, transaccion, xIdRubro);
                transaccion.Commit();
                return objRubro;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public Boolean existeRubro(long xIdRubro)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Boolean existe = objPerRubro.existeRubro(conexion, transaccion, xIdRubro);
                transaccion.Commit();
                return existe;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public Boolean existeRubro(String xNombre)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                Boolean existe = objPerRubro.existeRubro(conexion, transaccion, xNombre);
                transaccion.Commit();
                return existe;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public ArrayList obtenerColeccionRubro()
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                ArrayList colRubro = objPerRubro.obtenerColeccionRubro(conexion, transaccion);
                transaccion.Commit();
                return colRubro;
            }
            catch (Exception ex)
            {
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public int altaRubro(Rubro xObjRubro)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                xObjRubro.IdRubro = FuncionesGenericas.generarNumerador("RUBRO");
                int nro = objPerRubro.altaRubro(conexion, transaccion, xObjRubro);
                transaccion.Commit();
                return nro;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public int bajaRubro(Rubro xObjRubro)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                int nro = objPerRubro.bajaRubro(conexion, transaccion, xObjRubro);
                transaccion.Commit();
                return nro;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }

        public int modificaRubro(Rubro xObjRubro)
        {
            try
            {
                conexion = objConexion.abrirConexion();
                transaccion = conexion.BeginTransaction();
                int nro = objPerRubro.modificaRubro(conexion, transaccion, xObjRubro);
                transaccion.Commit();
                return nro;
            }
            catch (Exception ex)
            {
                transaccion.Rollback();
                throw new Exception("#Comunicacion# " + ex.Message);
            }
            finally
            {
                objConexion.cerrarConexion();
            }
        }
    }
}
